// src/router/utils/transform.js
// 动态路由转换工具
import { pathToName } from './helpers';

// 使用 Vite 的 glob 导入预加载所有视图组件
const viewModules = import.meta.glob('@/views/**/index.vue');

/**
 * 根据组件路径获取对应的组件
 * @param {string} componentPath - 组件路径，如 "system/index" 或 "system/user/index"
 * @returns {Function|null} 组件加载函数
 */
function getComponent(componentPath) {
  // 构建完整的组件路径
  const fullPath = `/src/views/${componentPath}.vue`;
  
  // 查找匹配的组件
  const matchedModule = viewModules[fullPath];
  
  if (matchedModule) {
    console.log(`✅ 组件找到: ${componentPath} -> ${fullPath}`);
    return matchedModule;
  }
  
  // 如果找不到，尝试其他可能的路径格式
  const altPath = `/src/views/${componentPath}/index.vue`;
  if (viewModules[altPath]) {
    console.log(`✅ 组件找到: ${componentPath} -> ${altPath}`);
    return viewModules[altPath];
  }
  
  // 列出所有可用的组件路径，帮助调试
  console.error(`❌ 组件未找到: ${componentPath}`);
  console.error(`   尝试的路径: ${fullPath}, ${altPath}`);
  console.log('   可用的组件路径:', Object.keys(viewModules));
  return null;
}

/**
 * 将服务端返回的动态路由转换为前端路由格式
 * 服务端返回的路由格式：
 * {
 *   path: "/userPath/sendMessage",
 *   title: "发送消息",
 *   icon: "message",
 *   component: "user/send/index",  // 对应 @/views/user/send/index.vue
 *   children: [...]  // 可选的子路由
 * }
 * 
 * @param {Array} backendRoutes - 服务端返回的动态路由列表
 * @returns {Array} 转换后的前端路由配置
 */
export function transformBackendRoutes(backendRoutes) {
  if (!backendRoutes || backendRoutes.length === 0) {
    return [];
  }

  const routes = [];

  backendRoutes.forEach(menu => {
    // 基础路由配置
    const route = {
      path: menu.path,
      name: pathToName(menu.path),  // 自动生成 name
      meta: {
        title: menu.title,
        icon: menu.icon || 'document',
      },
    };

    // 如果指定了组件路径，获取对应的组件
    if (menu.component) {
      const component = getComponent(menu.component);
      if (component) {
        route.component = component;
      } else {
        console.error(`路由 ${menu.path} 的组件加载失败: ${menu.component}`);
      }
    }

    // 递归处理子路由
    if (menu.children && menu.children.length > 0) {
      route.children = transformBackendRoutes(menu.children);
    }

    routes.push(route);
  });

  return routes;
}

/**
 * 合并本地静态路由和服务端动态路由
 * @param {Array} localRoutes - 本地静态路由
 * @param {Array} backendRoutes - 服务端动态路由（已转换）
 * @returns {Array} 合并后的路由列表
 */
export function mergeRoutes(localRoutes, backendRoutes) {
  // 简单合并：本地路由 + 服务端路由
  return [...localRoutes, ...backendRoutes];
}
